<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8" />
		<meta http-equiv="X-UA-Compatible" content="IE=edge" />
		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
		<title>let面试题</title>
	</head>
	<body>
		<script>
			var arr = [];
			for (var i = 0; i < 2; i++) {
				arr[i] = function () {
					console.log(i);
				};
			}
			// 此处 arr[0]、arr[1] 函数内找不到 i, 所以会到上一级作用域中去找, 上一级作用域就是全局作用域, 全局作用域中保存的是导致循环退出的 i 值, 也就是 2
			arr[0](); // 2
			arr[1](); // 2

			var arr1 = [];
			for (let i = 0; i < 2; i++) {
				arr1[i] = function () {
					console.log(i);
				};
			}
			arr1[0](); // 0
			arr1[1](); // 1
			// 此处 arr[0]、arr[1] 函数内找不到 i, 所以会到上一级作用域中去找, 上一级作用域是每次循环产生的块级作用域, 所以每次的 i 值不一样

			// 此题的关键点在于每次循环都会产生一个块级作用域，每个块级作用域中的变量都是不同的，函数执行时输出的是自己上一级（循环产生的块级作用域）作用域下的 i 值
		</script>
	</body>
</html>
